iT邦幫忙

2026 iThome 鐵人賽

DAY 8
1

上週我們把後端骨架搭好了:資料庫、FastAPI、使用者檔案 API 都能動。但目前這個系統還很死,你送什麼進去,它就照著代碼邏輯回什麼,完全不會思考。

今天要花一整天,先不寫太多代碼,把「Agent」這個詞真正搞懂。因為接下來兩週要做的所有事,都是建立在這個概念上:怎麼讓一個本機運行的開源模型,從只會回答問題的工具,變成一個真的能規劃、能判斷、能陪你調整計畫的教練。

先說清楚這個專案裡兩個角色的分工,避免搞混:

  • Claude Code:我的開發夥伴。負責協助我寫代碼、測試、debug,加快這 30 天的開發速度。它不會出現在教練系統裡。
  • Ollama 本機模型:真正的教練。使用者跟教練互動時,實際思考、生成回答的是在你自己電腦上運行的開源模型,不用呼叫外部 API、不用付費,對話資料也不會離開這台電腦。

LLM 是什麼

LLM(大型語言模型)本質上是一個很會「接話」的模型。你給它一段文字,它根據訓練時看過的大量資料,算出接下來最合理的字詞,一個字一個字接下去,接出一段完整的回答。

想像成一個讀過非常多書的朋友:你問他問題,他不是在資料庫裡查答案,而是憑著讀過的東西,直接把最像樣的回答講出來。這也是為什麼 LLM 偶爾會講錯,因為它是在「接得像」,不是在「查得準」。

我們的教練用的是 Meta 開源的 llama3.1:8b,透過 Ollama 在你自己的電腦上跑起來。單獨呼叫它一次,它會回你一段文字,然後就結束了,它不會自己記得剛剛做了什麼,也不會自己決定「這件事我要分三步驟做」。

Agent 是什麼:多了一個循環

Agent 是在 LLM 外面包一層邏輯,讓它能重複「想 → 做 → 看結果 → 再想」,直到把一件事真正完成,而不是回一段話就結束。

核心循環只有四步:

Observe(觀察現況)
    ↓
Think(模型想該怎麼做)
    ↓
Action(真的去執行,比如查資料庫、生成計畫)
    ↓
回到 Observe,看看做完之後現況變成怎樣

對應到我們的 AI 學習教練:使用者說「我今天進度落後了」(Observe),模型判斷這是進度落後、需要重新排程(Think),系統去查這個使用者的計畫和可用時間、呼叫本機模型生成新的排程(Action),排程更新後,再看使用者下一句話要做什麼(回到 Observe)。

單純呼叫一次模型,只做得到「Think」這一步。要做出整個循環,需要程式邏輯把這四步串起來,這就是 Day 10 要開始寫的 LangGraph。

簡單的 Prompt 工程

Prompt 就是你給模型的指令。同一件事,問法不同,得到的品質差很多,開源模型對這點又比大型商用模型更敏感,指令給得越清楚,效果差距越明顯。

三個馬上能用的原則:

  • 講清楚角色和任務:與其問「幫我排計畫」,不如說「你是一位學習教練,根據使用者的目標和可用時間,生成一份 4 週的學習計畫」
  • 給明確的輸出格式:如果希望拿到結構化資料,直接說「用 JSON 格式回答,欄位包含 week、topic、tasks」
  • 給例子:先給一個範例輸出,模型照著格式生成的準確率會高很多

Day 13 寫 Planner Agent 時會更深入練習怎麼設計 Prompt,今天先知道這個概念就夠。


實作:第一次呼叫本機 Ollama 模型

步驟1:安裝 Ollama

進入 ollama.com/download,下載對應你作業系統的安裝檔(Windows/Mac/Linux 都有),安裝過程一路 Next 就好。

驗證安裝:

ollama --version

看到版本號代表裝好了。

步驟2:下載 llama3.1:8b 模型

ollama pull llama3.1:8b

模型大概 4-5 GB,第一次下載需要一點時間,視網路速度而定。下載完後可以用這個指令確認:

ollama list

應該會看到 llama3.1:8b 出現在清單裡。

步驟3:直接在終端機測試模型

在寫程式之前,先確認模型本身能跑:

ollama run llama3.1:8b

會進入一個對話模式,輸入「用一句話說明什麼是學習教練」按 Enter,應該會看到模型的回答。確認沒問題後,輸入 /bye 離開。

這一步很重要:如果終端機裡都跑不動,代表是 Ollama 或模型本身的問題,之後寫 Python 程式時會更難排查。先確認這層沒問題,之後遇到錯誤才知道是程式的問題還是模型的問題。

步驟4:安裝 Python 的 Ollama 套件

cd backend
python -m pip install ollama

驗證:

python -c "import ollama; print('安裝成功')"

步驟5:寫測試腳本

檔案位置: backend/test_ollama.py
狀態: 新增檔案
用途: 驗證 Ollama 本機服務有跑起來、模型能正常回應
依賴: ollama

import ollama


def test_ollama_connection() -> None:
    """呼叫一次本機 Ollama 模型,確認服務和模型都正常"""
    response = ollama.chat(
        model="llama3.1:8b",
        messages=[
            {"role": "user", "content": "用一句話說明什麼是學習教練"}
        ],
    )
    print("模型回答:", response["message"]["content"])


if __name__ == "__main__":
    test_ollama_connection()

執行:

python test_ollama.py

應該看到類似這樣的輸出:

模型回答: 學習教練是根據你的目標和進度,持續陪伴並調整學習方向的夥伴。

看到回答,代表 Ollama 服務、模型下載、Python 套件都串起來了,之後兩週要用到的一切都建立在這支測試腳本能跑成功的基礎上。


常見問題

ConnectionError,連不上 Ollama

Ollama 安裝好之後,背景會自動啟動一個本機服務(預設在 http://localhost:11434)。如果連不上,先確認 Ollama 應用程式真的有在跑(工作列或工作管理員裡找得到),或手動執行 ollama serve 把服務啟動起來。

model 'llama3.1:8b' not found

還沒下載模型。執行 ollama pull llama3.1:8b,等下載完成再跑腳本。

回答速度很慢

本機模型的速度取決於你的硬體(有沒有獨立顯卡、記憶體多少)。純 CPU 也能跑,但可能要等 10-30 秒才有完整回答,這是正常的,跟呼叫雲端 API 幾乎即時的速度不一樣。

電腦記憶體不足或當機

llama3.1:8b 建議至少 8GB 可用記憶體。如果電腦負擔不了,可以換更小的模型,例如 ollama pull llama3.2:3b,品質會打折但比較省資源。

ModuleNotFoundError: No module named 'ollama'

確認裝套件用的 pip 和執行腳本用的 python 是同一個環境,跑 python -m pip install ollama 最保險。


進度回顧

今天沒有寫複雜的程式碼,但把最重要的觀念釐清了:LLM 只會接話,Agent 是在外面包一層「想 → 做 → 看結果」的循環,讓它能真正完成任務而不只是回一句話。也第一次把 Ollama 裝起來、下載了 llama3.1:8b,成功從 Python 拿到本機模型的回答。

系統現在是這樣的:

Day 1 ✓ 產品定義完成
Day 2 ✓ 開發環境準備
Day 3 ✓ 專案架構設計
Day 4 ✓ 資料庫設計
Day 5 ✓ SQLite 資料庫建置
Day 6 ✓ FastAPI 基礎
Day 7 ✓ 使用者檔案 API
Day 8 ✓ 理解 LLM Agent 的本質(今天)
Day 9 ⬜ 連接 Ollama 本機模型

今天的測試腳本只是暖身,明天要把 Ollama 真正接進系統裡,讓它能回傳結構化的 JSON。


上一篇
Day 7:使用者檔案 API
下一篇
Day 9:連接 Ollama 本機模型 - 拿到結構化回應
系列文
30天用 Claude Code + LangGraph 實作個人化 AI 學習教練10
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
tsengyulun
iT邦新手 5 級 ‧ 2026-09-22 01:38:10

總廚 明天要煮到35輪喔

pst iT邦新手 5 級 ‧ 2026-09-22 10:26:28 檢舉

那簡簡單單啊

我要留言

立即登入留言